Java基础(1)

您所在的位置:网站首页 Java中的基本数据类型有 种 Java基础(1)

Java基础(1)

2023-06-01 14:22| 来源: 网络整理| 查看: 265

面向过程:是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现

面向对象:是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为。面向对象有封装、继承、多态的特性,所以易维护、易复用、易扩展。可以设计出低耦合的系统。 

从性能上来看,面向过程的性能更优秀

Java的基本数据类型

boolean:int4字节

int是基本数据类型,Integer是int的封装类,是引用类型。int默认值是0,而Integer默认值是null,所以Integer能区分出0和null的情况。一旦java看到null,就知道这个引用还没有指向某个对象,再任何引用使用前,必须为其指定一个对象,否则会报错。

基本数据类型在声明时系统会自动给它分配空间,而引用类型声明时只是分配了引用空间,必须通过实例化开辟数据空间之后才可以赋值。数组对象也是一个引用对象,将一个数组赋值给另一个数组时只是复制了一个引用,所以通过某一个数组所做的修改在另一个数组中也看的见。虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位。这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节。使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),具有高效存取的特点。

instanceof关键字

java中的一个双目运算符,用于判断对象类型是否属于某个类型

重载和重写

重载是在一个java类中,重写是在不同java类中

重写 :

发生在父类与子类之间

方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同

访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)

重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常

重载 :

重载Overload是一个类中多态性的一种表现

重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)

重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准

 java内部类

 目的:提高安全性

用的比较频繁的是匿名内部类

关于局部内部类的一个小问题:

在jdk1.8之后,局部内部类使用外部方法的局部变量默认提升为final,在jdk1.8之前,局部内部类使用外部方法的局部变量,局部变量声明为final。

为什么需要声明为final?

方法的生命周期。如果不声明为final,外部方法执行完后,局部变量会被GC,而此时局部内部类还未被GC,会引发异常。

Java中的四种引用类型

强软弱虚

强引用:强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收

软引用:软引用在程序内存不足时,会被回收。可用场景: 创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。

弱引用:弱引用就是只要JVM垃圾回收器发现了它,就会将之回收。可用场景: Java源码中的 java.util.WeakHashMap 中的 key 就是使用弱引用,Threadlocal为了解决内存泄漏问题,采用了虚引用,同时还需要自己remove相应的map,我的理解就是,一旦我不需要某个引用,JVM会自动帮我处理它,这样我就不需要做其它操作。

虚引用:虚引用的回收机制跟弱引用差不多,但是它被回收之前,会被放入 ReferenceQueue 中。注意哦,其它引用是被JVM回收后才被传入 ReferenceQueue 中的。由于这个机制,所以虚引用大多被用于引用销毁前的处理工作。还有就是,虚引用创建的时候,必须带有 ReferenceQueue。可用场景: 对象销毁前的一些操作,比如说资源释放等。 Object.finalize() 虽然也可以做这类动作,但是这个方式即不安全又低效。

hashCode的作用

hashCode方法可以这样理解:它返回的就是根据对象的内存地址换算出的一个值。这样一来,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。

hash存在哈希冲突,如何解决?

在产生hash冲突时,两个不相等的对象就会有相同的 hashcode 值.当hash冲突产生时,一般 有以下几种方式来处理:

拉链法:每个哈希表节点都有一个next指针,多个哈希表节点可以用next指针构成一个单向链 表,被分配到同一个索引上的多个节点可以用这个单向链表进行存储。HashMap中采用了数组+红黑树+链表,其中就采用了单向链表和双向链表。

开放定址法:一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总 能找到,并将记录存入

再哈希:又叫双哈希法,有多个不同的Hash函数.当发生冲突时,使用第二个,第三个….等哈希函数 计算地址,直到无冲突



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3